//css模块
var gulp=require('gulp');
var webserver=require('gulp-webserver');
var url=require('url');
var fs=require('fs');
var sass=require('gulp-sass');
var minifyCss=require('gulp-minify-css');

//js模块
var uglify=require('gulp-uglify');//代码丑化
var webpack=require('gulp-webpack')
//version
var named=require('vinyl-named');//重命名模块
var rev=require('gulp-rev');//版本生成操作
var revCollector=require('gulp-rev-collector');//版本选择
var watch=require('gulp-watch');//监控
var sequence=require('gulp-watch-sequence'); //队列
var minifyHTML=require('gulp-minify-html'); // 压缩html代码

gulp.task('webserver',function(){
    gulp.src('www').
    pipe(webserver({
        livereload:true,//热更新
        open:true,//打开服务
        middleware:function(req,res,next){
            var urlObj=url.parse(req.url,true),
            method=req.method;
            switch(urlObj.pathname){
                case "/api/skill.php":
                res.setHeader('Content-Type','application/json');//返回的res数据设置成json格式
                fs.readFile('mock/skill.json','utf-8',function(err,data){//从mock目录下读取skill.json数据，返回为utf-8的格式
                    res.end(data);
                })
                return;

                case "/api/project.php":
                res.setHeader('Content-Type','application/json');//返回的res数据设置成json格式
                fs.readFile('mock/project.json','utf-8',function(err,data){//从mock目录下读取project.json数据，返回为utf-8的格式
                    res.end(data);
                })
                return;

                case "/api/work.php":
                res.setHeader('Content-Type','application/json');//返回的res数据设置成json格式
                fs.readFile('mock/work.json','utf-8',function(err,data){//从mock目录下读取work.json数据，返回为utf-8的格式
                    res.end(data);
                })
                return;
                
                case "/api/me.php":
                res.setHeader('Content-Type','application/json');//返回的res数据设置成json格式
                fs.readFile('mock/me.json','utf-8',function(err,data){//从mock目录下读取work.json数据，返回为utf-8的格式
                    res.end(data);
                })
                return;

                default:
                ;
            }
            next();//继续往下执行
        }
    }))
})
//www,dist

//复制首页文件
gulp.task('copy-index',function(){
    return gulp.src('./src/index.html').pipe(gulp.dest('./www'));
})
//复制图片文件  静态资源文件
gulp.task('copy-images',function(){
    return gulp.src('./src/images/**').pipe(gulp.dest('./www/images'))
})
//复制资源文件
gulp.task('copy-resources',function(){
    return gulp.src('./src/resources/**').pipe(gulp.dest('./www/resources'))
})
//sass文件转化
gulp.task('sass',function(){
    return gulp.src('./src/css/**/*.scss')
    .pipe(sass())
    .pipe(gulp.dest('./www/css'))
})

//模块化开发
var jsFiles=['src/js/index.js'];

gulp.task('packjs',function(){
    return gulp.src(jsFiles)
    .pipe(named())
    .pipe(webpack())
    .pipe(uglify())
    .pipe(gulp.dest('./www/js'))
})
//版本控制，css,js的版本控制
var cssDistFiles=['./www/css/index.css'];
var jsDistFiles=['./www/js/index.js'];

//css ver控制
gulp.task('verCss',function(){
    return gulp.src(cssDistFiles)
    .pipe(rev())
    .pipe(gulp.dest('./www/css'))
    .pipe(rev.manifest())
    .pipe(gulp.dest('./www/ver/css'))
})

//js ver控制
gulp.task('verJs',function(){
    return gulp.src(jsDistFiles)
    .pipe(rev())
    .pipe(gulp.dest('./www/js'))
    .pipe(rev.manifest())
    .pipe(gulp.dest('./www/ver/js'))
})

//html版本字符串替换操作

gulp.task('html',function(){
    return gulp.src(['./www/ver/**/*.json','./www/*.html'])
    .pipe(revCollector({replaceReved:true}))
    .pipe(gulp.dest('./www/'))
})

gulp.task('watch',function(){
    gulp.watch('./src/index.html',['copy-index']);
    gulp.watch('./src/images/**',['copy-images']);
    gulp.watch('./src/resources/**',['copy-resources']);
    
    // 队列
    var queue = sequence(300);
    watch('./src/js/**/*.js',{
        name:"JS",
        emitOnGlob:false
    },queue.getHandler('packjs','verJs','html'))


     watch('./src/css/**/*.scss',{
        name:"CSS",
        emitOnGlob:false
    },queue.getHandler('sass','verCss','html'))


})

gulp.task('hello',function(){
    var queue = sequence(300);

    console.log(queue);
})

gulp.task('default',['webserver','watch']);

